package com.ato.IO;

import org.junit.Test;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author wangjing
 * @create 2021--12--09--20:46
 * 1:输出操作时，如果文件不存在，是可以的，会自动创建
 * 如果文件存在，且第二个参数（append）为false ，那么就不是对原文件的追加。而是覆盖
 * fw = new FileWriter(file, true); 如果第二个参数不填，默认是覆盖源文件
 * 2：注意。
 */
public class IOFileWriterTest {
    @Test
    public void test1() {
//        1:提供File  指明要写入哪里
        FileWriter fw = null;

        try {
            File file = new File("hello.txt");
//        2:提供FileWriter 用户数据的写出  参数2：决定如果文件存在的情况下，是否追加在源文件
            fw = new FileWriter(file, true);
//        3:写出的操作
            fw.write("通过程序写入34\n");
            fw.write("通过程序写入3");
//        4：关闭流
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fw != null) fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Test
    public void ReadToWriter() {
        FileReader fr = null;
        FileWriter fw = null;
        try {
            File src = new File("hello.txt");
            File out = new File("hello1.txt");
            fr = new FileReader(src);
            fw = new FileWriter(out);
//            设置每次读取几个字符
            char[] cbuf = new char[5];
//            读取到的长度
            int len;
//            每次读取后，判断是否为-1 -1则关闭循环
            while ((len = fr.read(cbuf)) != -1) {
//                每次写入时，你读取了几个字符，那么 每次就写入几个 这里是追加，所以就从每次的0开始 写入的是就是当前读取到的len个
                fw.write(cbuf, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

//            关闭的这里，可以并列 因为try catch其实就已经把异常处理了，下面的代码也会执行 ，
//            也可以在第一个try catch里加一个finally 在关闭另外一个
            try {
                if (fw != null) fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fr != null) fr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }



    }
}